home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
datelib.exe
/
OSTERN_S.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-27
|
2KB
|
75 lines
static char ost_prg[] = "@(#)char *ostern_s(int jjjj)";
static char ost_ver[] = "@(#)v1.00/kr+K.Rupp ; 10.08.91";
/* ostern_s basiert auf der Funktion long ostern(int jjjj) aus der
Sammlung C-Funktionen I v2.0 von K.Rupp.
Es wird das Osterdatum im Jahr jjjj ermittelt.
Es wird ein String im Format "tt.mm.jjjj" zurückgegeben,
der z.B. mit der Funktion cnvtdate() in ein anderes Format
konvertiert werden kann. Der String gibt das Datum für
den Ostersonntag aus.
Die Funktion arbeitet z.Z. im Zeitraum 1700 - 2199 und gibt
einen NULL-Zeiger zurück, falls das Jahr außerhalb liegt.
*/
#include <stdio.h>
#include <stdlib.h>
char *ostern_s(int jjjj)
{
char datum[11];
int a, b, c, d, e, N, tt, mm;
int M = 23;
datum[0] = '\0';
switch(jjjj/100)
{
case 17: /* 1700 bis 1799 */
N = 3;
break;
case 18: /* 1800 bis 1899 */
N = 4;
break;
case 19: /* 1900 .. */
case 20: /* .. bis 2099 */
M++;
N = 5;
break;
case 21: /* 2100 bis 2199 */
M++;
N = 6;
break;
default:
return(NULL);
} /* ENDE: switch(jjjj/100) */
a = jjjj % 19;
b = jjjj % 4;
c = jjjj % 7;
d = (19*a + M) % 30;
e = (2*b + 4*c + 6*d + N) % 7;
tt = 22 + d + e;
mm = 3; /* März */
if (tt < 22 || tt > 31) {
tt = d + e - 9;
mm++; /* April */
}
if (mm == 4) { /* wenn April */
if (tt == 26)
tt = 19;
if (tt == 25 && d == 28 && a > 10)
tt = 18;
}
/* Umwandlung in String :
*/
sprintf(datum,"%2.2d.%2.2d.%4.4d",tt,mm,jjjj);
datum[10] = '\0';
return(datum);
} /* ENDE: ostern_s() */